/*
 * ConnectionPool.cpp
 *
 *  Created on: 15-01-2011
 *      Author: Michal Lisicki
 */

#include "ConnectionPool.h"
// #include "../Commands/Command.h"

using namespace Network;

ConnectionPool::ConnectionPool() {

}

ConnectionPool::~ConnectionPool() {

}

int ConnectionPool::getPosition() {
	return 0;
}

ConnectionPool::ConnectionList* ConnectionPool::getAll() {
	return &connections;
}

void ConnectionPool::addConnection(ClientConnection* cC, int pos) {
    connections.replace(pos, cC);
}

ClientConnection* ConnectionPool::getConnection(std::string from) {
	for(int i=0; i<MAX_CONN; i++) {
		if(!(connections.is_null(i))) {
			if(connections[i].getClientIP() == from)
				return &connections[i];
		}
	}
	return NULL;
}

int ConnectionPool::count() {
	int counter = 0;
	for(int i=0;i<MAX_CONN;i++)
		if(!(connections.is_null(i)))
			counter++;
	return counter;
}

bool ConnectionPool::isFull() {
	return !(count() < MAX_CONN);
}

void ConnectionPool::broadcast( Commands::Command* cmd ) {
	/* TODO XXX WTF: odkomentowanie ponizszej linii powoduje dziwne bledy umiejscowione
	 * w bibliotece standartowej :P. Jak mi wysylales pierwotna wersje kodu, to mialem
	 * podobnie... blad zostal naprawiony, kiedy zamienilem boost::ptr_list na std::list.
	 * To w sumie kilka sekund zmian, moze bedzie predzej, niz naprawiac ponizsze.
	 * Chyba, ze sie z tym spotkales i wiesz o co chodzi?
	 * YYY: aha. bo to nie jest juz lista w sumie tylko tablica
	std::ostringstream s;
	cmd->serialize( s );
	ConnectionListIter end = connections.end();
	for( ConnectionListIter i = connections.begin(); i != end; ++i ) {
//		if( !i.is_null() ) { //XXX: w tej liscie moze byc null?! Jak to sprawdzic?
			(*i).getOutputStream() = s;
			//TODO: (*i)->write();
//		}
	}
	*/
}
